﻿using System;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;
using Mx.Ipn.Escom.TT20080015.Modelo.DB;

namespace Mx.Ipn.Escom.TT20080015.Vistas.Datos
{
    public partial class PacienteView : System.Web.UI.Page
    {
        /// <summary>
        /// Se cargan los componentes de la página.
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] == null)
                Server.Transfer("~/Default.aspx", false);

            if (!this.IsPostBack)
            {
                try
                {
                    lPais.DataSource = RegionManager.ConsultarPaises();
                    lPais.DataMember = "paises";
                    lPais.DataTextField = "nombre";
                    lPais.DataValueField = "id";
                    lPais.DataBind();
                }
                catch (Exception ex)
                {
                    Context.Items.Add("msg", ex.Message);
                    Server.Transfer("../../vistas/control/PaginaError.aspx", false);
                }

                lPais.SelectedValue = lPais.Items.FindByText("Mexico").Value;
            }

            if(Context.Items.Contains("Id"))
            {
                idPacienteHiddenField.Value = Context.Items["Id"].ToString();

                Paciente p = PacienteManager.Consultar(Convert.ToInt32(idPacienteHiddenField.Value));
                idPacienteHiddenField.Value = p.Id.ToString();
                tbNombre.Text = p.Nombre;
                tbAPaterno.Text = p.APaterno;
                tbAMaterno.Text = p.AMaterno;
                tbFechaNac.Text = p.FechaNacimiento.ToString("dd/MM/yyyy");
                masculinoRadioButton.Checked = p.Sexo;
                tbCalle.Text = p.Calle;
                tbNoExterior.Text = p.NoExterior;
                tbNoInterior.Text = p.NoInterior;
                tbColonia.Text = p.Colonia;

                consultarButton.Visible = true;
                modificarButton.Visible = true;
                eliminarButton.Visible = true;
                clasificarButton.Visible = true;
            }
        }

        /// <summary>
        /// Este método se encarga de registrar un Paciente en la base de datos
        /// y redirecciona a la vista CasoEstudio para registrar tambien el caso de estudio del nuevo paciente.
        /// </summary>
        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            Paciente paciente = ObtenerPaciente();
            try
            {
                PacienteManager.Registrar(paciente);
                paciente.Id = PacienteManager.LastInsertedId();
                CasoEstudioManager.Registrar(new Estudio(paciente.Id));
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }

            Context.Items.Add("paciente", paciente);
            Server.Transfer("./CasoEstudio.aspx");
        }

        protected void clasificarButton_Click(object sender, EventArgs e)
        {
            Context.Items.Add("paciente", ObtenerPaciente());
            Server.Transfer("./CasoEstudio.aspx", true);
        }

        /// <summary>
        /// Este método realiza la actualización de los datos de un Paciente y le confirma la acción al usuario.
        /// </summary>
        protected void modificarButton_Click(object sender, EventArgs e)
        {
            try
            {
                PacienteManager.Actualizar(ObtenerPaciente());
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }

            Context.Items.Add("msg", "Los datos del paciente han sido actualizados");
            Server.Transfer("../../vistas/control/Control.aspx", false);
        }

        /// <summary>
        /// Este método se encarga de eliminar el Panciente seleccionado y le confirma la acción al usuario.
        /// </summary>
        protected void eliminarButton_Click(object sender, EventArgs e)
        {
            try
            {
                PacienteManager.Eliminar(idPacienteHiddenField.Value);
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }

            Context.Items.Add("msg", "El paciente ha sido eliminado");
            Server.Transfer("../../vistas/control/Control.aspx",false);
        }

        /// <summary>
        /// Este método obtiene los datos capturados en el formulario de registro de un nuevo paciente.
        /// </summary>
        /// <returns>Un objeto Paciente</returns>
        protected Paciente ObtenerPaciente()
        {
            return new Paciente(Convert.ToInt32(idPacienteHiddenField.Value), Util.Validar(tbNombre.Text),
                    Util.Validar(tbAPaterno.Text), Util.Validar(tbAMaterno.Text), tbFechaNac.Text, (femeninoRadioButton.Checked), Util.Validar(tbCalle.Text),
                    Util.Validar(tbNoExterior.Text), Util.Validar(tbNoInterior.Text), Util.Validar(tbColonia.Text), lPais.SelectedValue.ToString());
        }
    }
}
